Segment Routing (SR) is a technology that implements the source routing paradigm. A packet header includes a stack of function identifiers, known as segments, which define an ordered list of functions to be applied to the packet. A segment can represent any instruction, topological or service-based. A segment can have a local semantic to an SR node or global within an SR domain. These functions include, but are not limited to, the forwarding behaviors to be applied successively to the packet, notably destination-based unicast forwarding via a sequence of explicitly enumerated nodes (domain-unique node segments) and links (adjacency segments), and the like. SR allows forcing a flow through any topological path and service chain while maintaining per-flow state only at the ingress node to the SR domain. Segment Routing is described, for example, in Internet Engineering Task Force (IETF) Draft draft-ietf-spring-segment-routing-14, dated Dec. 20, 2017, and entitled “Segment Routing Architecture,” the contents of which are incorporated by reference herein (available online at tools.ietf. org/html/draft-ietf-spring-segment-routing-14). A particular attraction of Segment Routing is that it reduces the need to install and maintain any end-to-end (e2e) path state in the core network. Only the ingress node for a particular flow needs to hold the segment stack which is applied as the header of every packet of that flow, to define its route through the network. This makes Segment Routing particularly suited to control by a Software Defined Networking (SDN) model.
Segment Routing can be directly applied to Multiprotocol Label Switching (MPLS) with no change in the forwarding plane. A segment is encoded as an MPLS label. An ordered list of segments is encoded as a stack of labels. The segment to process is on the top of the stack. Upon completion of a segment, the related label is popped from the stack. Segment Routing can also be applied to the Internet Protocol (IP) v6 architecture, with a new type of routing extension header—for example, the document published July 2015 as draft-previdi-6man-segment-routing-header (available online at tools.ietforg/html/draft-previdi-6man-segment-routing-header-07), the entirety of which is incorporated herein by reference. A segment is encoded as an IPv6 address. An ordered list of segments is encoded as an ordered list of IPv6 addresses in the routing extension header. The segment to process at any point along the path through the network is indicated by a pointer in the routing extension header. Upon completion of a segment, the pointer is incremented. Segment Routing can also be applied to Ethernet, e.g., IEEE 802.1 and variants thereof. There are various benefits asserted for SR including, for example, scalable end-to-end policy, easy incorporation in IP and SDN architectures, operational simplicity, a balance between distributed intelligence, centralized optimization, and application-based policy creation, and the like.
Additionally, Segment Routing can include Traffic Engineering, such as described in Segment Routing Policy for Traffic Engineering draft-filsfils-spring-segment-routing-policy-04.txt (December 2017) (available online at tools.ietf. org/html/draft-filsfils-spring-segment-routing-policy-04), the contents of which are incorporated by reference. Again, Segment Routing (SR) allows a headend node to steer a packet flow along any path. Intermediate per-flow states are eliminated thanks to source routing. The headend node is said to steer a flow into a Segment Routing Policy (SR Policy). The header of a packet steered in an SR Policy is augmented with the ordered list of segments associated with that SR Policy.